package org.start;

import java.util.*;

public class DataStructure {

    public static void testArrayList() {
        ArrayList<String> list1 = new ArrayList<>();
        // 不能直接set，需要先有元素
        // list1.set(1, "fqmyysjjd");
        System.out.println(list1.size());
        list1.add("fqmyysjjd");
        list1.add("fqmyysjjddx");
        list1.remove("fqmyysjjddx");
        System.out.println(list1);
    }

    public static void testLinkedList() {
        LinkedList<String> list = new LinkedList<>();
        // 用基本和ArrayList一样，但两者各有优劣，见start.md
        list.add("fqmyysjjd");
        list.size();
    }

    public static void testHashSet() {
        HashSet<String> fqm = new HashSet<>();
        fqm.add("fqmyysjjd");
        fqm.add("fqmyysjjd");
        HashSet<String> clone = (HashSet<String>)fqm.clone();
        System.out.println(clone);
        System.out.println(fqm);
    }

    public static void testHashMap() {
        HashMap<String, String> map = new HashMap<>();
        map.put("fqm", "fqmyysjjd");
        map.put("fqmyysjjd", "fqmyysjjddx");

        map.forEach((key, value) -> {
            // map映射类似js的map，但是处理一个key
            map.compute(key, (k, v) -> {
                System.out.println(k + v);
                return v + "!!!";
            });
        });

        System.out.println(map);

        map.clear();
        System.out.println(map);
    }

    // 使用泛型，继承公共类，既可以使用一些方法，但是传入的参数的类型也得继承这些类
    // 如下的 Comparable
    public static <T extends Comparable<T>> void max(T value1, T value2) {
        System.out.println(value1.compareTo(value2) > 0);
    }

    // 可选类型
    public static void fqmSout(HashMap<?, ?> arr) {
        System.out.println(arr);
    }

    public static void main(String[] args) {
        // testArrayList();
        // testLinkedList();
        // testHashSet();
        // testHashMap();
        // max("fqm", "fqmyyssjjd");
        // max(23, 15);
        // max(15.2, 15.0);

        HashMap<String, String> fqm = new HashMap<>();
        fqm.put("fqm", "fqmyysjjd");
        fqmSout(fqm);
    }
}
